package com.breezelin.fmlib.widgets;

/**
 * Created by Breeze Lin
 * 18:32 2016/4/5
 * 1linyufeng1@gmail.com
 */

import android.app.Dialog;
import android.content.Context;
import android.view.View;
import android.widget.TextView;

import com.breezelin.fmlib.R;

/**
 * 通用确认提示框
 */
public class FMTipDialog extends Dialog implements View.OnClickListener {

	/**
	 * 标题
	 */
	private TextView titleTxt;
	/**
	 * 内容
	 */
	private TextView contentTxt;
	/**
	 * 左侧按钮
	 */
	private TextView leftBtn;
	/**
	 * 右侧按钮
	 */
	private TextView rightBtn;

	/**
	 * 回调（单按钮）
	 */
	private NoticeDialogListener noticeListener;
	/**
	 * 回调（双按钮）
	 */
	private DialogListener commonListener;

	/**
	 * 通用提示框<br/>
	 * 用于通知消息。单按钮，没有回调，按钮使用默认的文案“确定”。
	 *
	 * @param context 上下文
	 * @param content 提示内容
	 */
	public FMTipDialog(Context context, String content) {
		super(context, R.style.dialog_style);
		init();
		rightBtn.setVisibility(View.GONE);
		contentTxt.setText(content);
	}

	/**
	 * 通用提示框<br/>
	 * 用于通知消息。单按钮，按钮使用默认文案。
	 *
	 * @param context  上下文
	 * @param content  提示内容
	 * @param listener 监听
	 */
	public FMTipDialog(Context context, String content, NoticeDialogListener listener) {
		super(context, R.style.dialog_style);
		init();
		rightBtn.setVisibility(View.GONE);
		contentTxt.setText(content);
		noticeListener = listener;
	}

	/**
	 * 通用提示框<br/>
	 * 用于通知消息。单按钮，没有回调。
	 *
	 * @param context 上下文
	 * @param content 提示内容
	 * @param btnTxt  按钮文案
	 */
	public FMTipDialog(Context context, String content, String btnTxt) {
		super(context, R.style.dialog_style);
		init();
		rightBtn.setVisibility(View.GONE);
		contentTxt.setText(content);
		leftBtn.setText(btnTxt);
	}

	/**
	 * 通用提示框<br/>
	 * 用于通知消息。单按钮。
	 *
	 * @param context  上下文
	 * @param content  内容
	 * @param btnTxt   按钮文案
	 * @param listener 监听
	 */
	public FMTipDialog(Context context, String content, String btnTxt, NoticeDialogListener listener) {
		super(context, R.style.dialog_style);
		init();
		rightBtn.setVisibility(View.GONE);
		contentTxt.setText(content);
		leftBtn.setText(btnTxt);
		noticeListener = listener;
	}

	/**
	 * 通用提示框<br/>
	 * 双按钮，按钮使用默认文案。
	 *
	 * @param context  上下文
	 * @param content  内容
	 * @param listener 监听
	 */
	public FMTipDialog(Context context, String content, DialogListener listener) {
		super(context, R.style.dialog_style);
		init();
		contentTxt.setText(content);
		commonListener = listener;
	}

	/**
	 * 通用提示框<br/>
	 * 双按钮
	 *
	 * @param context  上下文
	 * @param content  内容
	 * @param leftTxt  左侧按钮文案
	 * @param rightTxt 右侧按钮文案
	 * @param listener 监听
	 */
	public FMTipDialog(Context context, String content, String leftTxt, String rightTxt, DialogListener listener) {
		super(context, R.style.dialog_style);
		init();
		contentTxt.setText(content);
		leftBtn.setText(leftTxt);
		rightBtn.setText(rightTxt);
		commonListener = listener;
	}

	/**
	 * 绑定视图
	 */
	private void init() {
		// 绑定视图
		setContentView(R.layout.dialog_common);
		titleTxt = (TextView) findViewById(R.id.txt_title);
		contentTxt = (TextView) findViewById(R.id.txt_content);
		leftBtn = (TextView) findViewById(R.id.btn_left);
		rightBtn = (TextView) findViewById(R.id.btn_right);

		leftBtn.setOnClickListener(this);
		rightBtn.setOnClickListener(this);

		// 默认可以点击外部返回
		setCanceledOnTouchOutside(true);
	}

	/**
	 * 更改默认的标题
	 *
	 * @param title 想要显示的标题
	 */
	public void setTitle(String title) {
		titleTxt.setText(title);
	}

	@Override
	public void onClick(View v) {
		int id = v.getId();
		if (id == R.id.btn_left) {
			// 左侧按钮
			if (noticeListener != null) {
				noticeListener.onButtonClick();
			}
			if (commonListener != null) {
				commonListener.onButtonClick(true);
			}
		} else if (id == R.id.btn_right) {
			// 右侧按钮
			if (commonListener != null) {
				commonListener.onButtonClick(false);
			}
		}
		dismiss();
	}

	/**
	 * 用于通知的提示框回调（单按钮）
	 */
	public interface NoticeDialogListener {

		/**
		 * 提示框底部按钮点击回调（只有一个的情况）
		 */
		void onButtonClick();
	}

	/**
	 * 用于正常提示框回调（双按钮）
	 */
	public interface DialogListener {

		/**
		 * 提示框按钮回调
		 *
		 * @param left 是否为左侧按钮
		 */
		void onButtonClick(boolean left);
	}
}
